<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Promise常用API-对象方法</title>
</head>
<body>
  
  <script type="text/javascript">
    /*
      Promise常用API-对象方法
    */
    console.dir(Promise)
    function queryData(url) {
      return new Promise(function(resolve, reject){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
          if(xhr.readyState != 4) return;
          if(xhr.readyState == 4 && xhr.status == 200) {
            // 处理正常的情况
            resolve(xhr.responseText);
          }else{
            // 处理异常情况
            reject('服务器错误');
          }
        };
        xhr.open('get', url);
        xhr.send(null);
      });
    }

    var p1 = queryData('http://localhost:3000/a1');
    var p2 = queryData('http://localhost:3000/a2');
    var p3 = queryData('http://localhost:3000/a3');
    // all 并发处理多个任务 所有任务执行完成得到结果 ，相当于Python中的all 函数
    // Promise.all([p1,p2,p3]).then(function(result){
      // 返回的结果是一个数组 结果集对应的就是all 中的顺序

    //   console.log(result)
    // })
    // 并发处理多个函数 ，只要有一个任务执行完成，就可以返回结果 相当于Python中的 any函数
    Promise.race([p1,p2,p3]).then(function(result){
      // 得到最先返回的结果 但是其他的异步任务不会被终止 依然在执行 但是结果不被人关心
      console.log(result)
    })
  </script>
</body>
</html>